package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.PO.DeviceOnlineStatusAlterLogPO;
import com.itlong.cloud.POJO.PO.OperateUserInfoPO;
import com.itlong.cloud.POJO.PO.ProductTypePO;
import com.itlong.cloud.POJO.VO.operate.DeviceRunLogVO;
import com.itlong.cloud.POJO.VO.operate.OperateDeviceDetailsVO;
import com.itlong.cloud.POJO.VO.operate.OperateDeviceManageInfoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      运营-固件升级-安装包管理操作数据接口。
 * <desc/>
 *
 * @createDate 2018/08/23.
 */
@Mapper
@Repository
public interface IOperateDeviceManageDao {

     /**
      * <desc>
      *      分页获取设备信息。
      * <desc/>
      *
      * @param  params
      * @return
      * @author Qiang.S
      * @createDate 2019/01/18
      */
    List<OperateDeviceManageInfoVO> getDeviceInfoPage(Map<String, Object> params);

    /**
     * <desc>
     *      设备信息结果总记录数。
     * <desc/>
     *
     * @param params
     * @return
     * @author Qiang.S
     * @createDate 2019/01/18
     */
    Integer getDeviceInfoCount(Map<String, Object> params);

    /**
     * <desc>
     *      设备信息总数。
     * <desc/>
     *
     * @param deviceType 设备类型:1云对讲,2云电梯,3人脸平板
     * @return
     * @author Qiang.S
     * @createDate 2019/01/18
     */
    Integer getDeviceInfoCountAll(@Param("deviceType") String deviceType,@Param("mark") String mark);

    /**
     * <desc>
     *      获取每种设备的数量
     * </desc>
     *
     * @param
     * @return
     * @Author Zhu.yj
     * @createDate  2019/10/28
     */
    List<Map<String,Object>> getEachDeviceCount();

    /**
     * <desc>
     *      修改设备的状态 删除、恢复
     * </desc>
     *
     * @param params 参数
     * @return
     * @author Juguang.S
     * @createDate 2020/12/02
     */
    void modifyDeviceStatus(Map<String, Object> params);

    /**
     * <desc>
     *     根据项目Id获取项目名称
     * </desc>
     *
     * @param
     * @return
     * @author caoshuai
     * @createDate 2020/11/16 16:32
     */
    OperateDeviceDetailsVO getProjectInfoById(@Param("projectId") String projectId);

    /**
     * <desc>
     *     根据设备号获取项目名称
     * </desc>
     *
     * @param
     * @return
     * @author caoshuai
     * @createDate 2020/11/16 16:32
     */
    Map<String, Object> getDeviceInfoById(@Param("deviceUnique") String deviceUnique, @Param("deviceType") Integer deviceType);

    /**
     * <desc>
     *      运行日志列表
     * </desc>
     *
     * @param params 设备ID
     * @return
     * @author caoshuai
     * @createDate 2020/11/16 13:40
     */
    List<DeviceRunLogVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      运行日志列表总计
     * </desc>
     *
     * @param params 设备ID
     * @return
     * @author caoshuai
     * @createDate 2020/11/16 13:40
     */
    Integer getPageTotal(Map<String, Object> params);

    /**
     * <desc>
     *      保存指令
     * </desc>
     *
     * @param params 设备ID
     * @return
     * @author caoshuai
     * @createDate 2020/11/16 13:40
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      获取设备在线状态变更日志列表
     * </desc>
     *
     * @param params 设备ID
     * @return
     * @author caoshuai
     * @createDate 2020/11/16 13:40
     */
    List<DeviceOnlineStatusAlterLogPO> getDeviceOnlineStatusAlterLogPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取设备在线状态变更日志列表总数
     * </desc>
     *
     * @param params
     * @return
     * @author caoshuai
     * @createDate 2020/11/16 13:40
     */
    Integer deviceOnlineStatusAlterLogTotal(Map<String, Object> params);

    /**
     * <desc>
     * 获取用户信息
     * </desc>
     *
     * @param myUserName
     * @return
     * @author caoshuai
     * @createDate 2020/12/14 11:30
     */
    OperateUserInfoPO getOperateUserPO(String myUserName);

    /**
     * <desc>
     *      获取设备开门比例
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @Author Zhu.yj
     * @createDate  2020/12/23
     */
    List<Map<String, Object>> getOpenCount(@Param("deviceUnique") String deviceUnique);
    /**
     * <desc>
     *      获取Intercom iot product_key
     * </desc>
     *
     * @param
     * @return
     * @author caoshuai
     * @createDate 2020/12/30 19:47
     */
    ProductTypePO getIntercomVersonIotkey(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取pad iot product_key
     * </desc>
     *
     * @param
     * @return
     * @author caoshuai
     * @createDate 2020/12/30 19:47
     */
    ProductTypePO getPadVersonIotkey();




    /**
    *<desc>
    * 查询云设备的推送指令
    *</desc>
    *
    * @Author  chengshican
    * @Date   2020-12-29 13:51
    * @Param  tableName 数据库表名 ， sn 设备sn,deviceUnique 设备唯一标识
    * @Return  commandStatus 命令处理状态：0-待处理，1-处理中，2-处理完,  updateTime 更新时间,  createTime 创建时间
    * @Exception
    *
    */
    Map<String, Object>  getPushCloudChangeLog(Map<String, Object> params);



     /**
     *<desc>
     * @Description
     *</desc>
     *
     * @Author  chengshican
     * @Date   2020-12-30 9:23
     * @Param  deviceUnique 设备唯一标识
     * @Return   syncStatus 同步状态标志 1.待同步；2.同步中;3.同步结束;4.同步失败,   updateTime 更新时间,  createTime 创建时间
     * @Exception
     *
     */
    Map<String, Object>  getPadPullCloudInfo(Map<String, Object> params);

    /**
     * <desc>
     *      分页获取设备信息。
     * <desc/>
     *
     * @param  params
     * @return
     * @author caoshuai
     * @createDate 2021/01/06
     */
    List<OperateDeviceManageInfoVO> getDeviceInfoPage1(Map<String, Object> params);

    /**
     * <desc>
     *      设备信息结果总记录数。
     * <desc/>
     *
     * @param params
     * @return
     * @author caoshuai
     * @createDate 2021/01/06
     */
    Integer getDeviceInfoCount1(Map<String, Object> params);


    /**
     * <desc>
     *      iot设备设备信息结果总记录数。
     * <desc/>
     *
     * @param deviceType
     * @return
     * @author caoshuai
     * @createDate 2021/01/06
     */
    int getIotDeviceInfoCountAll(@Param("deviceType") String deviceType,@Param("mark") String mark);
}
